package org.bigjava.novelplatform.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.bigjava.novelplatform.common.enums.UserRole;
import org.bigjava.novelplatform.entity.Users;
import org.bigjava.novelplatform.vo.BookInfoVo;
import org.bigjava.novelplatform.vo.UserInquireVo;

import java.math.BigDecimal;
import javax.xml.crypto.Data;
import java.util.Date;
import java.util.List;

/**
* @author YKH
* @description 针对表【users】的数据库操作Mapper
* @createDate 2022-03-20 14:42:21
* @Entity org.bigjava.novelplatform.entity.Users
*/
public interface UsersMapper extends BaseMapper<Users> {
    /**
     * like查询用户类型为userType，的昵称
     * @param input
     * @param userType
     * @return
     */
    List<Users> listWriterByLike(@Param("input") String input, @Param("userRole") UserRole userType);

    /**
     * 查询邮箱
     * @param mailBox
     * @return
     */
    String selectEmail(@Param("mailBox") String mailBox);

    /**
     * 根据邮箱查询用户
     * @param email
     * @return
     */
    Users selectUserByEmail(@Param("email") String email);

    /**
     * 修改密码
     * @param email
     * @param password
     */
    void updatePasswordByEmail(@Param("email") String email, @Param("password") String password);

    /**
     * 根据id查询用户邮箱
     * @param id
     * @return
     */
    String selectEmailById(@Param("id") Integer id);

    /**
     * 修改身份
     * @param id
     * @param userRole
     */
    void updateTypeById(@Param("id") Integer id, @Param("userRole") UserRole userRole);

    /**
     * 修改用户信息
     * @param id
     * @param path
     * @param nickName
     */
    void updateUserInfoById(@Param("id") Integer id, @Param("path") String path, @Param("nickName") String nickName,
                            @Param("email") String email);

//    void insertUser(@Param("user") Users user);


    /**
     *
     * 查询用户的页面
     */
    UserInquireVo userInquire(@Param("id") Integer id);


    /**
     * 查询用户的书架有基本书籍
     */
    int userInquireboook(@Param("id") Integer id);

    /**
     * 查询用户的分组
     * @param userId
     * @return
     */
    List<String> selectGroup(@Param("userId") Integer userId);


    /**
     * 查询书籍粉丝,包括它们的贡献值
     * @param bookId
     * @param limit
     * @return
     */
    List<BookInfoVo.Fans> selectBookFan(Integer bookId, Integer limit);

    Users selectId(Integer addressorId);

    /**
     * 修改余额
     * @param userId
     * @param balance
     * @return
     */
    boolean updateTokensBalanceById(@Param("userId") Integer userId, @Param("balance") BigDecimal balance);

    /**
     * 模糊搜索昵称
     */
    List<Users> SearchNickname(@Param("input") String input);

    /**根据用户email删除用户*/
    Integer updateDeleteStateByEmail(@Param("email") String email);

    /**根据用户email恢复已删除的用户*/
    Integer recoveryDeleteStateByEmail(@Param("email") String email);

    /**根据用户类型获取用户集合*/
    List<Users> getUserForType(@Param("type") Integer type);
    /**获取已删除的用户集合*/
    List<Users> getDeletedUser();
    /**获取指定的用户类型中 已禁言的用户集合*/
    List<Users> getImprisonUser(@Param("userType") Integer userType, @Param("type") Integer type);
    /**获取指定的用户类型中 新用户集合 注册时间大于传入时间为新用户*/
    List<Users> getNewUser(@Param("userType") Integer userType,@Param("type") Date type);
    /**获取指定的用户类型中 老用户集合 经验值大于传入经验值为老用户*/
    List<Users> getOldUser(@Param("userType") Integer userType,@Param("type") Long type);

    /**获取已删除的用户数量*/
    Integer getDeletedUserBynumber();

    /**获取指定用户类型的数量*/
    Integer getTypeUserBynumber(@Param("type") Integer type);

    /**获取已禁言的用户数量*/
    Integer getImprisonUserBynumber();
    /**获取 新用户数量 注册时间大于传入时间为新用户*/
    Integer getNewUserBynumber(@Param("type") Date type);
    /**获取 老用户数量 经验值大于传入经验值为老用户*/
    Integer getOldUserBynumber(@Param("type") Long type);

}




